/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.knolle.proveedorServicios;


import java.util.Arrays;
import java.util.List;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.marcelo.agro.core.DynamicLookup;
import org.marcelo.agro.core.api.IActividades;
import org.marcelo.agro.core.api.ICampanhas;
import org.marcelo.agro.entidades.Campanas;
import org.marcelo.agro.entidades.Lotes;
import org.marcelo.agro.entidades.LotesPorCampana;
import org.marcelo.agro.entidades.eventos.ActividadesEvent;
import org.marcelo.agro.entidades.eventos.CampaniasEvent;
import org.marcelo.comun.eventos.NodeEvent;
import org.openide.util.Lookup;
import org.openide.util.lookup.ServiceProvider;

/**
 *
 * @author marcelo
 */
@ServiceProvider(service = ICampanhas.class)
public class CampanasDatabase  extends DefaultDatabase<Campanas>  implements ICampanhas {

    @Override
    public List<Campanas> getCampanasActivas(){
        
        List<Campanas> campanasActivasList;
//        try {
           campanasActivasList = super.getFilteredObjects(
                Campanas.class,Arrays.asList(Restrictions.gt("estaActivo", 0)) , Order.asc(DEFAULT_ORDEN));
            return campanasActivasList;
//        }
//        catch(Exception e){
//            Notificaciones.notificar(MENSAJE_ERROR_CONSULTA, e.toString());
//        }
//        return new ArrayList<Campanas>();
    }

    @Override
    public List<Campanas> getCampanasNoActivas() {
//        try{
            return super.getFilteredObjects(
                Campanas.class,Arrays.asList(Restrictions.eq("estaActivo", 0)) , Order.asc(DEFAULT_ORDEN));
//        }
//        catch(Exception e){
//            Notificaciones.notificar(MENSAJE_ERROR_CONSULTA, e.toString());
//        }
//        return new ArrayList<Campanas>();
    }

    @Override
    public List<LotesPorCampana> getLotesParaCampanha(Campanas campanha) {
//       try{
            return super.getFilteredObjects(
                LotesPorCampana.class,
                Arrays.asList(Restrictions.eq("campanas", campanha)) , Order.asc(DEFAULT_ORDEN));
//       }
//       catch(Exception e){
//            Notificaciones.notificar(MENSAJE_ERROR_CONSULTA, e.toString());
//        }
//        return new ArrayList<LotesPorCampana>();
    }

    @Override
    public List<Lotes> getLotes() {
//        try {
            return super.getAllObjects(Lotes.class, Order.asc(DEFAULT_ORDEN));
//        }
//        catch(Exception e){
//            Notificaciones.notificar(MENSAJE_ERROR_CONSULTA, e.toString());
//        }
//        return new ArrayList<Lotes>();
    }


    @Override
    public Boolean esUnico(Campanas object) {
        
        List<Campanas> resultList = find(object);
        if ( null != resultList )
            if (resultList.size() > 0)
                if (  null != object.getId() &&  object.getId().equals(resultList.get(0).getId())){
                    return true;
                }
                else {
                    return false;
                }
        return true;
    }   
    
   
    @Override
    public List<Campanas> find(Campanas object) {
//        try{
            return super.getFilteredObjects(Campanas.class, 
                 Arrays.asList(Restrictions.eq("nombre", object.getNombre())), 
                 Order.asc(DEFAULT_ORDEN));
//        }
//        catch(Exception e){
//            Notificaciones.notificar(MENSAJE_ERROR_CONSULTA, e.toString());
//        }
//        return new ArrayList<Campanas>();
        
    }

    @Override
    public List<Campanas> getAll() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public Boolean esUnico(String nombre) {
        Campanas campania = new Campanas();
        campania.setNombre(nombre);
        List<Campanas> result = find(campania);
        if (result != null) {
            if (result.size() > 0 ){
                return false;
            }
        }
        return true;
    }

    @Override
    public void saveOrUpdate(Campanas object) throws Exception {
        CampaniasEvent ce;
        if (object.getId() != null &&  object.getId() > 0) {
            ce = new CampaniasEvent(CampaniasEvent.TIPOS_EVENTO.EDITED);
        }
        else {
            ce = new CampaniasEvent(CampaniasEvent.TIPOS_EVENTO.CREATED);
        }
        super.saveOrUpdate(object);
        
        DynamicLookup.getDefault().add(ce);
        DynamicLookup.getDefault().remove(ce);
    }

    @Override
    public void saveOrUpdates(Object[] objects) throws Exception{
        super.saveOrUpdates(objects);
        
        CampaniasEvent ce = new CampaniasEvent(CampaniasEvent.TIPOS_EVENTO.EDITED);
        DynamicLookup.getDefault().add(ce);
        DynamicLookup.getDefault().remove(ce);
    }

    @Override
    public void delete(LotesPorCampana lpc) throws Exception {
       
           //traer las actividades
           //borrar las actividades
           //borrar el loteporcampana
           IActividades ia = Lookup.getDefault().lookup(IActividades.class);
           deleteParentAndChild(lpc, ia.getActividades(lpc).toArray());
           ActividadesEvent ae = new ActividadesEvent(NodeEvent.TIPOS_EVENTO.DELETED);
           DynamicLookup.getDefault().add(ae);
           DynamicLookup.getDefault().remove(ae);
       
    }

    @Override
    public void delete(Campanas campanas) throws Exception {
        super.delete(campanas);
    }
    
    
    
    
    
}
